package cn.buk.tms.train.service;

import cn.buk.common.JsonResult;
import cn.buk.tms.dto.TrainOrderDto;
import cn.buk.tms.dto.TrainOrderPassengerDto;
import cn.buk.tms.entity.misc.OperationLog;
import cn.buk.tms.train.sc.TrainOrderSearchCriteria;

import java.util.List;

public interface TrainOrderService {

    /**
     * 查找订单
     */
    List<TrainOrderDto> searchTrainOrders(int enterpriseId, int userId, TrainOrderSearchCriteria sc);

    /**
     * 查找
     */
    TrainOrderDto getTrainOrderById(int enterpriseId, int userId, int orderId);

    /**
     * 创建订单
     */
    JsonResult createTrainOrder(int enterpriseId, String username, TrainOrderDto dto);

    /**
     * 修改订单备注
     */
    JsonResult updateTrainOrderRemark(int enterpriseId, String username, int orderId,
        String remark);

    /**
     * 修改外部订单号
     */
    JsonResult updateTrainOrderExternalOrderNo(int enterpriseId, String username, int orderId,
        String externalOrderNo);

    /**
     * 修改供应商
     */
    JsonResult updateTrainOrderSupplier(int enterpriseId, String username, int orderId,
        int supplierId);

    /**
     * 订单支付给供应商的付款方式
     */
    JsonResult updateTrainOrderPaymentMethod(int enterpriseId, String username, int orderId,
        int paymentMethodId);

    /**
     * 修改订单的价格
     */
    JsonResult updateTrainOrderPrice(int enterpriseId, String username, int orderId, double price,
        double cost, double serviceCharge);

    /**
     * 修改乘机人信息
     */
    JsonResult updateTrainOrderPassenger(int enterpriseId, String username, int orderId,
        TrainOrderPassengerDto psgDto);

    JsonResult processTrainOrder(int enterpriseId, String username, int orderId);

    /**
     * 火车票订单处理完毕
     */
    JsonResult finishTrainOrder(int enterpriseId, String username, int orderId, String remark);

    List<OperationLog> searchTrainOrderHistory(int enterpriseId, int orderId);

    /**
     * 取消火车票订单
     */
    JsonResult cancelTrainOrder(int enterpriseId, String username, int orderId, String remark);


    /**
     * 回滚火车票订单
     */
    JsonResult rollbackTrainOrder(int enterpriseId, String username, int orderId,
        final String remark);

    /**
     * 获取火车票订单要发送的内容
     */
    JsonResult getTrainOrderOrderSmsContent(int enterpriseId, String username, int orderId,
        int psgId, int smsFormat);

    JsonResult sendTrainOrderOrderSmsContent(int enterpriseId, String username, int orderId,
        int psgId, String mobileNo, int smsFormat, String smsContent);


    /**
     * 使用Excel生成火车票订单
     */
    JsonResult createTrainOrderByExcel(int enterpriseId, String username, String fileName,
        int supplierId, int paymentMethodId);

    void autoAlertTrainOrderStatus();
}
